gusucode.com > VC++ 基于IE内核功能很齐全的浏览器(支持多标签)-源码程序 > VC++ 基于IE内核功能很齐全的浏览器(支持多标签)-源码程序/code/Explorer/ContainerView.cpp
//Download by http://www.NewXing.com // ContainerView.cpp : implementation file // #include "stdafx.h" #include "ContainerView.h" #include "resource.h" #include "ViewManView.h" #include "IEView.h" #include "MainFrm.h" #include <afxcview.h> #include <afxhtml.h> #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CContainerView IMPLEMENT_DYNCREATE(CContainerView, CView) CContainerView::CContainerView() { m_bShowTreeView=TRUE; m_bShowListView=TRUE; } CContainerView::~CContainerView() { } BEGIN_MESSAGE_MAP(CContainerView, CView) //{{AFX_MSG_MAP(CContainerView) ON_WM_CREATE() ON_WM_SIZE() //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CContainerView drawing void CContainerView::OnDraw(CDC* pDC) { CDocument* pDoc = GetDocument(); // TODO: add draw code here } ///////////////////////////////////////////////////////////////////////////// // CContainerView diagnostics #ifdef _DEBUG void CContainerView::AssertValid() const { CView::AssertValid(); } void CContainerView::Dump(CDumpContext& dc) const { CView::Dump(dc); } #endif //_DEBUG ///////////////////////////////////////////////////////////////////////////// // CContainerView message handlers BOOL CContainerView::PreCreateWindow(CREATESTRUCT& cs) { if(!CView::PreCreateWindow(cs)) return FALSE; // TODO: Add your specialized code here and/or call the base class cs.dwExStyle &= ~WS_EX_CLIENTEDGE; cs.dwExStyle |= WS_EX_STATICEDGE; return TRUE; } int CContainerView::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CView::OnCreate(lpCreateStruct) == -1) return -1; // The context information is passed on from the framework CCreateContext *pContext = (CCreateContext*)lpCreateStruct->lpCreateParams; // Create the splitter window with two columns if (!m_wndSplitter.CreateStatic(this, 1, 2)) { TRACE0("Failed to create splitter window\n"); return FALSE; } if (!m_wndSplitter.CreateView(0,0,RUNTIME_CLASS(CListView), CSize(175, 0), pContext)) { m_wndSplitter.DestroyWindow(); return -1; } // add the third splitter pane - which is a nested splitter with 2 rows if (!m_wndSplitter2.CreateStatic(&m_wndSplitter, // our parent window is the first splitter 2, 1, // the new splitter is 2 rows, 1 column WS_CHILD | WS_VISIBLE | WS_BORDER, // style, WS_BORDER is needed m_wndSplitter.IdFromRowCol(0, 1))) // new splitter is in the first row, 3rd column of first splitter { TRACE0("Failed to create nested splitter\n"); return FALSE; } // now create the two views inside the nested splitter if (!m_wndSplitter2.CreateView(0, 0, RUNTIME_CLASS(CListView), CSize(0, 100), pContext)) { m_wndSplitter2.DestroyWindow(); return FALSE; } if (!m_wndSplitter2.CreateView(1, 0, RUNTIME_CLASS(CViewManView), CSize(0, 0), pContext)) { m_wndSplitter2.DestroyWindow(); return FALSE; } m_pViewman=((CViewManView*)m_wndSplitter2.GetPane(1,0)); m_wndSplitter.HideColumn(0); m_wndSplitter2.HideRow(0); m_bShowTreeView=FALSE; m_bShowListView=FALSE; return 0; } void CContainerView::OnSize(UINT nType, int cx, int cy) { CView::OnSize(nType, cx, cy); if( m_wndSplitter.GetSafeHwnd()) { // move and grow view to clip border m_wndSplitter.MoveWindow(0,0, cx, cy); } } void CContainerView::HideView() { m_wndSplitter2.HideRow(0); } void CContainerView::OnInitialUpdate() { CView::OnInitialUpdate(); // TODO: Add your specialized code here and/or call the base class CWnd* pWnd=CreateIEView(); if(pWnd) { SetActiveView(0); AddTabItem("请稍候……",pWnd); } } CIEView* CContainerView::CreateIEView() { return (CIEView*)m_pViewman->AddView(RUNTIME_CLASS(CIEView)); } BOOL CContainerView::SetActiveView(int nIndex) { return m_pViewman->SetActiveView(nIndex); } BOOL CContainerView::DeleteView(int nIndex) { return m_pViewman->DeleteView(nIndex); } BOOL CContainerView::AddTabItem(LPCTSTR pItem, CWnd *pWnd) { return ((CMainFrame*)AfxGetMainWnd())->m_wndTabCtrl.InsertItem(((CMainFrame*)AfxGetMainWnd())->m_wndTabCtrl.GetItemCount(),pItem,pWnd); } CIEView* CContainerView::GetAciveView() { CView* pView=m_pViewman->GetActiveView(); ASSERT(pView->IsKindOf(RUNTIME_CLASS(CIEView))); return (CIEView*)pView; }